package thread;

import java.util.Scanner;

/**
 * 内存可见性问题, 本质上是由 "编译器优化" 带来的问题
 * volatile 关键字,修饰的变量能够保证 "内存的可见性" 的问题
 * 此时, 编译器就知道了这个变量是 "易变" 的
 */
public class demo19 {
    private static volatile int flag = 0;

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            while (flag == 0) {
                //  引入 sleep , 代码中的 load 就不会被编译器优化掉
//                try {
//                    Thread.sleep(1000);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
            }
            System.out.println("t1 结束");
        });

        Thread t2 = new Thread(() -> {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入 flag 值: ");
            flag = scanner.nextInt();
            System.out.println("t2 结束");
        });

        t1.start();
        t2.start();
    }
}
